/*****************************************************************************/
/* @file     Init.c
 * @author   TEST TEAM     
 * @version  v0
 * @date     Septemper 2022
 * @brief    Simple function in C, Ansi-style

 * Copyright (C) 2022 Hangzhou SDIC Microelectronics Co., Ltd*/

/******************************************************************************/
#include "define.h"

/*---------------------------------------------
 * 函数功能：初始化模拟功能
 * 入口参数：无
 * 出口参数：无
 * 返回值  ：无
 * 编写日期：
 * 作者    ：
 *---------------------------------------------*/
void PWR_Initialization(void)
{	
	PWR_BGCmd(ENABLE);
    PWR_ACMLevelConfig(PWR_ACMLevel_VBG);                  //配置ACM输出电压
    PWR_ACMCmd(ENABLE );	                               //使能ACM电路
	
	PWR_AVDDRCmd(ENABLE);                                  //使能AVDDR输出	

}


/*---------------------------------------------
 * 函数功能：初始化VIC
 * 入口参数：无
 * 出口参数：无
 * 返回值  ：无
 * 编写日期：
 * 作者    ：
 *---------------------------------------------*/
void VIC_Initialization(void)
{
	VIC_InitTypeDef  VIC_InitStruct;
	VIC_InitStruct.VIC_IRQChannel=UART0_IRQn;
	VIC_InitStruct.VIC_IRQChannelPriority=VIC_IRQChannelPriority2;
	VIC_InitStruct.VIC_PrioThreshold=VIC_PrioThreshold0;
	VIC_InitStruct.VIC_PrioThresholdCmd=DISABLE;
	VIC_InitStruct.VIC_IRQChannelWakeUpLowPowerCmd=DISABLE;
	VIC_InitStruct.VIC_IRQChannelCmd=ENABLE;
	
	VIC_Init(&VIC_InitStruct);
	
}

/*---------------------------------------------
 * 函数功能：初始化EXINT
 * 入口参数：无
 * 出口参数：无
 * 返回值  ：无
 * 编写日期：
 * 作者    ：
 *---------------------------------------------*/
void EXINT_Initialization(void)
{	

	
}

/*---------------------------------------------
 * 函数功能：初始化IWDG
 * 入口参数：无
 * 出口参数：无
 * 返回值  ：无
 * 编写日期：
 * 作者    ：
 *---------------------------------------------*/
void IWDG_Initialization(void)
 {

	
 }
 
 
/*---------------------------------------------
 * 函数功能：初始化WWDG
 * 入口参数：无
 * 出口参数：无
 * 返回值  ：无
 * 编写日期：
 * 作者    ：
 *---------------------------------------------*/
void WWDG_Initialization(void)
{

	
}


/*---------------------------------------------
 * 函数功能：初始化RTC
 * 入口参数：无
 * 出口参数：无
 * 返回值  ：无
 * 编写日期：
 * 作者    ：
 *---------------------------------------------*/
void RTC_Initialization(void)
{	


}

/*---------------------------------------------
 * 函数功能：初始化GPIO
 * 入口参数：无
 * 出口参数：无
 * 返回值  ：无
 * 编写日期：
 * 作者    ：
 *---------------------------------------------*/
void GPIO_Initialization(void)
{
	RCC_APBPeriphClockCmd(RCC_APBPeriph_GPIO, ENABLE);   //使能GPIO模块的时钟
	

}

/*******************USER*******************/

void TM_Initialization(void)
{


}
/*---------------------------------------------------
 * 函数功能：UART配置初始化
 * 入口参数：None
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *-------------------------------------------------*/
void UART_Initialization(void)
{
	UART_InitTypeDef  UART_InitStruct;

	RCC_APB2PeriphClockConfig(RCC_APBPeriph_UART0,RCC_UARTCLK_SYSCLK,0);//UART0时钟源选择系统时钟
	RCC_APBPeriphClockCmd(RCC_APBPeriph_UART0, ENABLE);//UART0时钟使能
   
    //UART0配置
	UART_InitStruct.UART_BaudRate=128000; //通讯波特率115200
	UART_InitStruct.UART_Mode=UART_Mode_TRx;//工作在全双工
	UART_InitStruct.UART_Parity=UART_Parity_None;//禁止校验
	UART_InitStruct.UART_StopBits=UART_StopBits_1;//1个停止位
	UART_InitStruct.UART_WordLength=UART_WordLength_8b;//数据长度8位
	UART_InitStruct.UART_CarryWave=UART_CarryWave_None; //关闭载波功能
	UART_Init(UART0,&UART_InitStruct);
   
	UART_ITConfig(UART0,UART_IT_RXNEIE, ENABLE);//允许产生接收中断
	
	UART_Cmd(UART0,ENABLE);//UART0使能
}

void I2C_Initialization(void)
{
   RCC_APB2PeriphClockConfig(RCC_APBPeriph_I2C,0,RCC_I2CCLK_DIV2);
   RCC_APBPeriphClockCmd(RCC_APBPeriph_I2C, ENABLE);                    //外设时钟使能
   I2C_InitTypeDef I2C_InitStruct;
   I2C_InitStruct.I2C_BaudRatePrescaler=0;
   I2C_InitStruct.I2C_Generate_Ack=ENABLE;
   I2C_InitStruct.I2C_AddressMode=I2C_AddressMode_7bit;
   I2C_InitStruct.I2C_Mode= I2C_Mode_Master; 
   
   I2C_Init(&I2C_InitStruct);
   I2C_Cmd(ENABLE);

}

void SPI_Initialization(void)
{
   RCC_APBPeriphClockCmd(RCC_APBPeriph_SPI, ENABLE); 

   SPI_InitTypeDef  SPI_InitStruct;
   
   SPI_InitStruct.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_2;   
   SPI_InitStruct.SPI_CPHA=SPI_CPHA_1Edge;
   SPI_InitStruct.SPI_CPOL=SPI_CPOL_Low; 
   SPI_InitStruct.SPI_DataSize=SPI_DataSize_32b;
   SPI_InitStruct.SPI_FirstBit=SPI_FirstBit_MSB;
   SPI_InitStruct.SPI_NSS= SPI_NSS_Soft;
   SPI_InitStruct.SPI_Mode=SPI_Mode_Master;
   
   SPI_Init(&SPI_InitStruct); 
   SPI_NSSInternalSoftwareCmd(ENABLE);
   SPI_Cmd(ENABLE); 
   
   SPI_SendData(0x08);

}

void LCD_Initialization(void)
{
/*void PFD_Init(void)
{
   RCC_APB1PeriphClockConfig(TM2CKS,RCC_TMCLK_IHRC,RCC_TMCLK_DIV8);
   RCC_APBPeriphClockCmd(RCC_APBPeriph_TM2, ENABLE);   //外设时钟使能
   TM_SetAutoReload(TM2,0xfa24);
   TM_Cmd(TM2, ENABLE);
   TM_PFDCmd(ENABLE);
}*/

}

void SIN_Initialization(void)
{
/*void PFD_Init(void)
{
   RCC_APB1PeriphClockConfig(TM2CKS,RCC_TMCLK_IHRC,RCC_TMCLK_DIV8);
   RCC_APBPeriphClockCmd(RCC_APBPeriph_TM2, ENABLE);   //外设时钟使能
   TM_SetAutoReload(TM2,0xfa24);
   TM_Cmd(TM2, ENABLE);
   TM_PFDCmd(ENABLE);
}*/

}

/*---------------------------------------------------
 * 函数功能：SDADC配置初始化
 * 入口参数：None
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *-------------------------------------------------*/
void SDADC_Initialization(void)
{	
	IA_InitTypeDef SDADC_IAInitStruct;
	SDADC_InitTypeDef SDADC_InitStruct;
	
	SDADC_Cmd(DISABLE);                               //关闭ADC
	SDADC_PGIACmd(DISABLE);						      //关闭PGIA
	
	RCC_APBPeriphClockCmd(RCC_APBPeriph_SDADC, ENABLE); //SDADC时钟使能
	
	SDADC_IAInitStruct.IA_ExteralChopper=IA_ExteralChopper_DIV256;       //  外部chopper（fl）频率设置
	SDADC_IAInitStruct.IA_InteralChopper=IA_InteralChopper_DIV128;       //  内部chopper（fh）频率设置
	SDADC_IAInitStruct.IA_VOS=0;                  //  PGIA修调位设置
	SDADC_IAInitStruct.IA_OSEN=DISABLE;         //  PGIA修调位使能
	SDADC_IAInitStruct.IA_OSSIGN=VOS_Positive_Phase;       //  PGIA修调正负号选择
	SDADC_IAInitStruct.IA_IAD=IA_IAD_x1;              //  PGIA偏置电流选择控制位
	SDADC_IAInitStruct.IA_RCF=IA_RCF_320k;                  //  设置RC滤波器中R的大小
	SDADC_IAInitStruct.IA_GAIN=IA_GAIN128;                 //  PGIA增益选择
	SDADC_IAInitStruct.IA_SIEN=DISABLE;         //  IAINP、IAINN短接控制位
	SDADC_IAInitStruct.IA_SIA=IA_SIA_HIGH;      //  PGIA输入端面积选择控制位
	SDADC_IAInitStruct.SDADC_IAINNS=SDADC_IAINNS_A1;            //  输入信号负端选择
	SDADC_IAInitStruct.SDADC_IAINPS=SDADC_IAINPS_A0;            //  输入信号正端选择
	
	SDADC_IAInit(&SDADC_IAInitStruct);				      //SDADC IA初始化
	
	SDADC_InitStruct.SDADC_BUFFDS=SDADC_BUFFDS8;                // Buf1/Buf2 chopper频率fb设置位;设置时需要保证fb>fh>fl
	SDADC_InitStruct.SDADC_Buf1=ENABLE;                                // Buf1使能位
	SDADC_InitStruct.SDADC_Buf2=ENABLE;                                // Buf2使能位
	SDADC_InitStruct.SDADC_DCSET=SDADC_DCSET0;                  // ADC失调电压选择
	SDADC_InitStruct.SDADC_VREFG=SDADC_VREFG1;                  // ADC参考电压放大倍数选择
	SDADC_InitStruct.SDADC_VREFS=SDADC_VREFS_AVDDRVSS;          // ADC参考电压源选择
	SDADC_InitStruct.SDADC_ASPCK1=1500000;                // 用来设定ADC的采样频率fs
	SDADC_InitStruct.SDADC_ADOUTS=SDADC_SINC3;         // SINC2/SINC3滤波器选择位
	SDADC_InitStruct.SDADC_OSR=SDADC_OSR128;         // 数字滤波器过采样率选择位
	SDADC_InitStruct.SDADC_DIEN=DISABLE;               // ADC dither使能位
	SDADC_InitStruct.SDADC_PAEN=DISABLE;               // ADC chopper控制位，仅在数字滤波器选择SINC2时有效
	
	SDADC_Init(&SDADC_InitStruct);				      //SDADC初始化
	

}
/*---------------------------------------------------
 * 函数功能：SARADC配置初始化
 * 入口参数：None
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *-------------------------------------------------*/
 //注意：在SARADC校准之前需将其配置好。若是改变配置，需重新校准。
void SARADC_Initialization(void)
{
	/*SARADC_InitTypeDef SARADC_InitType;

	RCC_APBPeriphClockCmd(RCC_APBPeriph_SARADC, ENABLE);//使能SARADC时钟

	//SARADC初始化，SARADC固定以AVDDR作为基准
	SARADC_InitType.SARADC_BufMode=SARADC_BufMode_HighSpeed;//BUF选择高速模式
	SARADC_InitType.SARADC_BufEN=ENABLE;//SARADC BUF使能
	SARADC_InitType.SARADC_BufPhase=SARADC_BufPhase_N;//BUF相位：反向
	SARADC_InitType.SARADC_Channel=SARADC_Channel_A0;//SARADC输入通道A0
	SARADC_InitType.SARADC_ContinuousMode=ENABLE;//转换模式,1:continue,0:single
	SARADC_InitType.SARADC_HighSpeedMode=ENABLE;//工作电流，1:大电流，0:小电流
	SARADC_InitType.SARADC_OVR_LoseCurrentValue=DISABLE;//发生OVR错误时是否保留当前数据	,1:保留，0：不保留
	SARADC_InitType.SARADC_ReadyTime=SARADC_ReadyTime_128SARCLK;//SARADC准备时间，128个SARADC时钟
	SARADC_InitType.SARADC_SampleTime=SARADC_SampleTime_64SARCLK;//SARADC转换时信号采样周期 64个SARADC时钟
	SARADC_InitType.SARADC_SARCLK=SARADC_SARCLK_IHRC_DIV4;//SARADC采样时钟 SARCLK=fana/4=（IHRC/2）/4=3M
	SARADC_InitType.SARADC_WaitMode=DISABLE;//不使能wait模式
	SARADC_Init(&SARADC_InitType);
	SARADC_Cmd(ENABLE);//使能SARADC
	
	SARADC_CalSampleTimeConfig(SARADC_CalSampleTime_16SARCLK);//SARADC校准采样周期为16个SARADC时钟
	SARADC_CalOneTimeCmd(ENABLE);//使能一次校准，0：16次校准，1：一次校准
	SARADC_CalibrationCmd(ENABLE);//使能校准
	
	while(!SARADC_GetITStatus(SARADC_RDYIE));//等待校准结束
	SARADC_ClearITStatus(SARADC_RDYIE);//清校准结束标志位
	
	SARADC_ConversionCmd(ENABLE);//使能SARADC转换*/
}